Listin Gambas2

Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas

Origine : http://listingambas.blogspot.com/2011/06/anexo-2-convert-miniaturas-en-nuestro.html

Annexe 2: convert, des miniatures dans notre gridviewDonnees

Dans notre gridviewDonnees, nous constatons que nous ne pouvons pas afficher des images entières, pourquoi ne pas en faire de petites vignettes que nous pourions ainsi mieux voir ....???? Linux possède des commandes et des programmes libres pour cela .... Au travail:

Le programme  convert va nous aider à réduire la taille des images téléchargées nécessaires à notre gridview,

Installation:

Depuis une console système, à l'invite on entre "convert", si nous ne le trouvons pas, il nous faut installer le programme.
Convert $
Le programme «convert» peut être trouvé dans les paquets suivants:
* Imagemagick
*- Imagemagick-compat graphicsmagick
Essayez: sudo apt-get install <paquet sélectionné>
bash: convert : command not found
$ Sudo apt-get install imagemagick

On nous demande de confirmer l'installation du paquet, et il s'installe.

Utilisez notre programme pour convertir: SHELL

Une fois que nous avons installé le programme, incluons le code que nous allons faire :
    • chaque fois que nous entrons ou modifions un enregistrement, au moment de remplir gridviewDonnees, nous voulons voir apparaître dans notre grille, au lieu  de l'image choisie, une image réduite (par exemple 120x120 pixels) .
    • Depuis la ligne de commande pour "redimensionner" une image à 120x120, nous ferons comme suit ...
$ convert -size 120x120 lena512.bmp -resize 120x120 +profile '*' thumbnailDD.jpg

dAinsi, "-size 120x120" donne comme indication au décodeur JPEG que l'image sera chargée en 120x120, ce qui permet de tourner plus vite et empêche le retour à une image haute résolution. Le “-resize 120x120”  spécifie les dimensions désirées de l'image de sortie. Elle sera redimensionnée de sorte que sa plus grande taille  sera de 120 pixels. Le "*" dans "+ profile" supprime toute information ICM, EXIF, IPTC, ou d'autres profils qui peuvent être présents dans l'image d'entrée et ne sont pas nécessaires dans les vignettes. "


L'exécution de cette commande sur l'image "lena512.bmp" de 257,1 Ko, nous a permis de la convertir en  "thumbnailDD.jpg" de seulement 3,7 Ko.

Alors, comment  le faire en gambas2? Eh bien, avec la commande "SHELL"
Nous allons créer un nouveau module que nous appelons miniatures
Nous y insérons ce code :

PUBLIC function faire(fichier AS String, taille AS String) AS string
DIM Proc AS process
DIM ligne AS String
DIM mini AS String
'vérifier si le réperoire des miniatureas existe
IF Exist("~/listin/mini") THEN
' le répertoire existe , ne pas le créer
ELSE
'le répertoire n'existe pas , il faut le créer...
'avant de s'y placer
MKDIR "~/listin"
'on se place dans “mini”
MKDIR "~/listin/mini"
ENDIF
'note :
'commande :  file.dir(path), n'extrait que le chemin (sans le nom de fichier)
'commande : file.name(path), n'extrait que le nom de fichier (sans le chemin)
mini = "~/listin/mini" & "/mini" & file.name(fichier)
IF Exist(mini) THEN
'l'archive mini existe, ne pas la créer
RETURN mini
ELSE
'La taille peut être 120x120, 96x96, etc
ligne = "convert -size " & taille & " " & fichier & " -resize " & taille & " +profile '*' " & mini
proc = SHELL ligne WAIT
'exécuter le processus et contrôler le flux de sortie dans notre application
RETURN mini
ENDIF
END

Notes:
1 - En plus de redimentionner l'image, la fonction miniatures.faire () retourne le chemin où sera crée la vignette.
2 - "~ / listin ":
Le caractère
~ est remplacé par le répertoire home de l'utilisateur, quel que soit l'utilisateur "/ home / Juillet" ou "/ home / john".

3 - Exist() : EXist ("~ / Listin / mini "): En cas de non existence, nous allons créer un répertoire à partir de notre home / user, appelé Listin / mini où stocker toutes les miniatures que nous ferons.  
Exist ( mini ) : Sl l'archive existe, nous exécuterons convert

4. SHELL : cette commande exécute le programme convert en ligne de commande, avec tous les attributs que nous avons ajoutés (le chemin du fichier, la taille et le nouveau nom de la vignette)

Bien, une fois le code élaboré, et le nouveau module créé, nous allons créer une checkbox (checkboxmini) dans le formulaire Fmain, pour que l'utilisateur "active ou désactive" l'option d'utilisation des miniatures dans gridviewDonnees, et ainsi on va également changer la subroutine "titre.remplir()" pour afficher les vignettes ou les fichiers originaux.

Emploi des miniatures

Nous devons définir dans le formulaire Fmain que lorsque la valeur de checkboxmini change, il faut aussi exécuter la routine  Tittre.Remplir ()
PUBLIC SUB CheckBoxmini_Click ()
titre. remplir ()
END


Et dans le code Titre.Remplir () : 
PUBLIC SUB remplir ()
DIM a AS Integer
FMain. gridviewDonnees . Rows . COUNT = var. id . COUNT
FOR a = 0 TO var. id . COUNT - 1
WITH FMain
IF FMain. CheckBoxmini . Value = FALSE THEN
. gridviewDonnees . Rows . Heigh = 25
. gridviewDonnees [a, 0 ]. Picture = Picture [var. photo [a]]
ELSE
. gridviewDonnees [a, 0 ]. Alignment = 1
. gridviewDonnees . Rows . Heigh = 100
. gridviewDonnees [a, 0 ]. Picture = Picture [miniatures. faire (var. photo [a], "96x96" )]
ENDIF
. gridviewDonnees [a, 1 ]. text = var. nom [s]
. gridviewDonnees [a, 2 ]. text = var. prenoms [a]
... ....

Remarque: La partie en jaune est ce qui a changé, ce qui fait que lorsque checkboxmini.value = false, l'image normale est tracée, et quand checkboxmini.value = true, on réalise la vignette et on redimensionne la hauteur de la ligne pour que l'image soit visible.


Remarque importante: Dans tous les endroits où  gridviewDonnees est remplie, il faut ajouter le même code.
Et nous devons faire aussi le même changement dans le module de filtrer.ConcepteFiltre.

... ...
... ...
valider = estdans (lignes, patron) AND estdans (lignes,  patron1) AND estdans (lignes,  patron2)
IF valider THEN
nombre + = 1
FMain. gridviewDonnees . Rows . COUNT = nombre
WITH FMain
IF FMain. CheckBoxmini . Value = FALSE THEN
. gridviewDonnees . Rows . height = 25
. gridviewDonnees [nombre - 1 , 0 ]. Picture = Picture [var. photo [a]]
ELSE
. gridviewDonnees [nombre - 1 , 0 ]. Alignment = 1
. gridviewDonnees . Rows . height = 100
. gridviewDonnees [nombre - 1 , 0 ]. Picture = Picture [. miniatures. faire (var. photo [a], "96x96" )]
ENDIF
. gridviewDonnees [nombre - 1 , 1 ]. text = . var nom [s]
... ....

Ici j'ai mis un exemple de l'aspect des enregistrements avec et sans vignettes:


Pas de vignette
Avec des vignettes
sans photo

avec photos



smiley
.... avec les vignettes ... c'est beaucoup mieux non?